package com.jt.service;

import com.jt.mapper.UserMapper;
import com.jt.pojo.User;
import com.jt.vo.PageResult;
import org.apache.tomcat.jni.Status;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.DigestUtils;

import java.sql.SQLException;
import java.util.Date;
import java.util.List;
import java.util.UUID;

@Service
public class UserServiceImpl implements UserService{

    @Autowired
    private UserMapper userMapper;

    @Override
    public List<User> findAll() {
        return userMapper.findAll();
    }

    @Override
    public String login(User user) {
        //1.加密处理
        String password = user.getPassword();
        password = DigestUtils.md5DigestAsHex(password.getBytes());
        user.setPassword(password);
        //2.查询数据库
        User userDB = userMapper.findUserByUP(user);
        if(userDB == null){
            //用户名或密码不对，返回null
            return null;
        }
        //用户名和密码正确，返回密钥token 要求密钥唯一
        //uuid 内部hash散列函数,根据当前毫秒进行散列，几乎可能保证不重复
        String token = UUID.randomUUID().toString();
        return token;
    }
    /**
     * 业务说明：需要分页查询
     * sql：
     *   select * from user limit 起始位置,查询的调数
     * 第一页：
     *    select * from user limit 0,10 真实下标[0-9] 含头不含尾
     * 第二页：
     *    select * from user limit 10,10
     * 第n页：
     *    select * from user limit (n-1)*10,10
     * @param //pageResult
     * @return
     */
    @Override
    public PageResult findUserList(PageResult pageResult) {
        int size = pageResult.getPageSize();
        int startNum = (pageResult.getPageNum()-1) * size;
        String query = pageResult.getQuery();
        //查询分页的结果
        List<User> userList =userMapper.findUserList(query,size,startNum);
        long total = userMapper.findCount(query);
        //将数据进行封装
        pageResult.setTotal(total).setRows(userList);
        return pageResult;
    }
    @Override
    @Transactional//控制事物 如果程序运行出现运行时异常,则实现事务回滚
    public void updateStatus(User user) {//两个参数有值
        user.setUpdated(new Date());
        userMapper.updateStatus(user);
    }
    //新增操作
    /**
     *    1.密码加密
     *    2.设定状态信息 true
     *    3.创建时间 修改时间
     *    4.注意事物控制
     * @param //user
     */
    @Override
    @Transactional//控制事物
    public void addUser(User user) {
        //1.密码加密
        String password = user.getPassword();
        password = DigestUtils.md5DigestAsHex(password.getBytes());
        user.setPassword(password);
        //1.创建设定时间
        user.setCreated(new Date());
        //2.创建修改时间
        user.setUpdated(new Date());
        //3.设定时间
        user.setStatus(true);
        userMapper.addUser(user);
    }

    //修改操作
    @Override
    public User findUserById(Integer id) {
        return userMapper.findUserById(id);
    }
    //根据用户id更新信息
    @Override
    @Transactional//控制事物
    public void updateUser(User user) {
        user.setUpdated(new Date());
        userMapper.updateUser(user);
    }

    @Override
    @Transactional//控制事物
    public void deleteUserById(Integer id) {
        userMapper.deleteUserById(id);
    }
//    //用户删除
//    @Transactional//用来控制事务 如果程序运行出现运行时异常,则实现事务回滚
//    @Override
//    public void deleteUserById(Integer id) {
//        userMapper.deleteUserById(id);
//    }

}
